尽管Python和数据库在金融分析中日益重要,Excel仍然是不可替代的工具:
本节学习如何用 pandas 高效读取Excel文件。
read_excel 函数:基础用法pd.read_excel() 是 Pandas 读取 Excel 文件的核心函数。
基本语法:
返回一个 DataFrame 对象,可直接用于后续分析。
read_excel 常用参数详解| 参数 | 说明 | 示例 |
|---|---|---|
sheet_name |
工作表名或索引 | 'Sheet1' 或 0 |
skiprows |
跳过的行数 | 1 |
usecols |
读取的列范围 | 'B:F' 或列名列表 |
dtype |
指定列的数据类型 | {'价格': float} |
converters |
列转换函数字典 | {'Flagship': fix_missing} |
nrows |
只读取前N行 | 100 |
df、df2、data1、data2 的业务含义、数据类型或取值范围,并判断哪一个输入最可能改变结果。data2 的结果;同时写出方向、数量级或表格/图形结构。# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
# 注:stores.xlsx数据文件本地没有,但平台已经内置
import pandas as pd # 导入Pandas数据分析库
df = pd.read_excel("stores.xlsx",sheet_name="2019", skiprows=1, usecols="B:F") # 从Excel文件读取数据存入df
print(df.info()) # 输出数据框基本信息
def fix_missing(x): # 定义函数fix_missing
return False if x in ["", "MISSING"] else x # 返回计算结果
# 从Excel文件读取数据存入df2
df2 = pd.read_excel("stores.xlsx",sheet_name="2019", skiprows=1, usecols="B:F",converters={"Flagship": fix_missing})
print(df2.info()) # 输出数据框基本信息
print(df2) # 输出数据框数据
with pd.ExcelFile("stores.xlsx") as f: # 使用上下文管理器
# 从Excel文件读取数据存入data1
data1 = pd.read_excel(f, "2019", skiprows=1, usecols="B:F", nrows=2,converters={"Flagship": fix_missing})
# 从Excel文件读取数据存入data2
data2 = pd.read_excel(f, "2020", skiprows=1, usecols="B:F", nrows=2,converters={"Flagship": fix_missing})
print(data1) # 输出数据数据运行后核对:核对 df、df2、data1、data2 是否按预测参与运算,实际输出是否与预测一致;若不一致,先检查类型、单位、索引/字段和运算顺序。
拓展练习:把输入表替换为本地中国上市公司数据的同结构子集;指出必须保持的字段、数据类型和质量检查。
stores.xlsx 的 2019 工作表读取数据converters 参数处理脏数据fix_missing 函数:将空字符串和 'MISSING' 替换为 Falseconverters 参数在读取时就完成数据清洗ExcelFile 类读取多个工作表ExcelFile 只打开文件一次,多次读取不同工作表nrows=2 限制只读取前2行(用于快速预览)ExcelFile 类的优势使用 ExcelFile 类而非多次调用 read_excel 的三大优势:
with 语句确保文件使用后自动关闭| 方法 | 适用场景 |
|---|---|
pd.read_excel() |
读取单个工作表 |
converters 参数 |
读取时清洗脏数据 |
pd.ExcelFile() |
高效读取同一文件的多个工作表 |
核心要点:
read_excel 是读取 Excel 的核心函数converters 可在读取阶段完成数据清洗ExcelFile 类逐项答案:下方 read_excel 演示基础读取并检查字段/dtype;Excel 便于人工交换多表,但显示格式不等于真实类型;拓展应用到长三角多表工作簿时用 pd.ExcelFile 一次解析后按 sheet 读取,以 sheet 名、字段、行数和证券代码前导零核对。
所用数据与字段:工作簿字段 code、date、value;date 为日期
参考代码或推导(平台保护块之外):
from io import BytesIO # 使用内存文件构造结果一致工作簿
import pandas as pd # 导入表格库
workbook_buffer=BytesIO() # 创建工作簿缓冲区
with pd.ExcelWriter(workbook_buffer,engine='openpyxl') as workbook_writer: # 写入教学最小输入
pd.DataFrame({'code':['000001'],'date':['2026-01-05'],'value':[10.5]}).to_excel(workbook_writer,index=False) # 保存字段要求
workbook_buffer.seek(0) # 将读取位置复位
df=pd.read_excel(workbook_buffer,dtype={'code':'string'},parse_dates=['date']) # 按约定读取
required={'code','date','value'} # 定义必需字段
assert required<=set(df.columns) and df.loc[0,'code']=='000001' # 核对字段与前导零
print(df.shape,df.dtypes.astype(str).to_dict()) # 输出结构(1,3) 与三列类型;证券代码前导零保留[商业大数据分析与应用]